
\subsection{字符串是啥？}

字符串可以看作是字符序列。

\subsection{字符集}

字符集是符号和文字组成的集合，在 OI 中，处理字符串时计算复杂度往往要考虑到字符集大小带来的常数影响。

举个栗子，如果一道题只包含'A' \textasciitilde{} 'Z' 意味着字符集大小是 26 。 如果再加上 '0' ～ '9' 字符集大小就变成了 36

计算复杂度时，字符集大小带来的常数往往要用 $\alpha$ 表示。

\subsection{如何存字符串}

可以开一个 \texttt{char} 数组 , 如 \texttt{char a[100]}

也可以用 \texttt{vector} 如  \texttt{vector<char> v}

同时 STL 中也提供了字符串容器 \texttt{std :: string} 

另外，在 \texttt{C / C++} 中也可以声明字符串字面量，比如 \texttt{char *buf = "XD"}。

\subsection{字符串存储的位置}

\begin{itemize}
\item 字符串字面量：它们的值在编译过程中已经确定，保存在可执行目标文件的 \texttt{.rodata} 段内。
调用 \texttt{objdump -s -j .rodata 文件名} 可以查看 \texttt{.rodata} 段的具体内容。
\item 字符数组、\texttt{vector}、\texttt{string}：局部变量保存在栈中，全局变量若初始化了保存在可执行目标文件的 \texttt{.data} 段内，若未初始化保存在 \texttt{.bss} 段。
\end{itemize}
